package com.ruoyi.course.service;

import com.ruoyi.course.domain.CourseSchedule;
import com.ruoyi.course.dto.BatchAddScheduleDto;
import com.ruoyi.course.dto.OneClickAddScheduleDto;

import java.util.List;

/**
 * 课程安排Service接口
 * 
 * @author ruoyi
 * @date 2025-06-12
 */
public interface ICourseScheduleService 
{
    /**
     * 查询课程安排
     * 
     * @param scheduleId 课程安排主键
     * @return 课程安排
     */
    public CourseSchedule selectCourseScheduleByScheduleId(Long scheduleId);

    /**
     * 查询课程安排列表
     * 
     * @param courseSchedule 课程安排
     * @return 课程安排集合
     */
    public List<CourseSchedule> selectCourseScheduleList(CourseSchedule courseSchedule);

    /**
     * 新增课程安排
     * 
     * @param courseSchedule 课程安排
     * @return 结果
     */
    public int insertCourseSchedule(CourseSchedule courseSchedule);

    /**
     * 修改课程安排
     * 
     * @param courseSchedule 课程安排
     * @return 结果
     */
    public int updateCourseSchedule(CourseSchedule courseSchedule);

    /**
     * 批量删除课程安排
     * 
     * @param scheduleIds 需要删除的课程安排主键集合
     * @return 结果
     */
    public int deleteCourseScheduleByScheduleIds(Long[] scheduleIds);

    /**
     * 删除课程安排信息
     * 
     * @param scheduleId 课程安排主键
     * @return 结果
     */
    public int deleteCourseScheduleByScheduleId(Long scheduleId);

    /**
     * 根据班级ID查询课程安排列表
     * 
     * @param claId 班级ID
     * @return 课程安排集合
     */
    public List<CourseSchedule> selectCourseScheduleByClaId(Long claId);

    /**
     * 检查时间冲突
     * 
     * @param claId 班级ID
     * @param specificDate 具体日期
     * @param timePeriod 时间段
     * @return 冲突的课程安排集合
     */
    public List<CourseSchedule> checkTimeConflict(Long claId, String specificDate, String timePeriod);

    /**
     * 检查模板课程冲突
     * 
     * @param claId 班级ID
     * @param weekDay 星期
     * @param timePeriod 时间段
     * @return 冲突的课程安排集合
     */
    public List<CourseSchedule> checkTemplateConflict(Long claId, String weekDay, String timePeriod);

    /**
     * 批量插入课程安排
     * 
     * @param batchDto 批量添加参数
     * @return 插入的记录数
     */
    public int batchInsertCourseSchedule(BatchAddScheduleDto batchDto);

    /**
     * 软删除课程安排
     * 
     * @param scheduleId 课程安排主键
     * @return 结果
     */
    public int softDeleteCourseSchedule(Long scheduleId);

    /**
     * 一键加课
     * 
     * @param oneClickDto 一键加课参数
     * @return 添加的课程数量
     */
    public int oneClickAddSchedule(OneClickAddScheduleDto oneClickDto);
}
